package cn.ee.dfs.monitor.service;

import cn.ee.dfs.monitor.entity.ApiLog;

import cn.ee.dfs.common.entity.QueryRequest;
import cn.ee.dfs.system.entity.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.scheduling.annotation.Async;

import java.util.List;
import java.util.Map;

/**
 * 操作日志表 Service接口
 *
 * @author TWJ
 * @date 2019-08-20 19:05:47
 */
public interface IApiLogService extends IService<ApiLog> {
    /**
     * 查询（分页）
     *
     * @param request QueryRequest
     * @param apiLog apiLog
     * @return IPage<ApiLog>
     */
    IPage<ApiLog> findApiLogs(QueryRequest request, ApiLog apiLog);

    /**
     * 查询（所有）
     *
     * @param apiLog apiLog
     * @return List<ApiLog>
     */
    List<ApiLog> findApiLogs(ApiLog apiLog);

    /**
     * 异步保存操作日志
     * @param point 切点
     * @param log   日志
     * @param key
     * @throws JsonProcessingException 异常
     */
    @Async("dfsAsyncThreadPool")
    void saveLog(ProceedingJoinPoint point, ApiLog log, String key) throws JsonProcessingException;


    /**
     * 修改
     *
     * @param apiLog apiLog
     */
    void updateApiLog(ApiLog apiLog);

    /**
     * 删除
     *
     * @param apiLog apiLog
     */
    void deleteApiLog(ApiLog apiLog);


    /**
     * @param serviceId  服务id
     * @param range  y M d  年月日
     * @return  统计服务调用数量
     */
    Integer getCallCount(Integer serviceId,String range);


    List<Map<String, Object>> findTop10ServiceCallOfYear();
    List<Map<String, Object>> findTop10SysCallOfYear();


}
